package simulaco.web;

import gminet.infra.web.AccessException;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import com.sun.faces.application.ActionListenerImpl;

public class WebActionListener extends ActionListenerImpl {

    @Override
    public void processAction(ActionEvent event) {

        FacesContext context = FacesContext.getCurrentInstance();
        try {
            // Executa o método
            super.processAction(event);
        } catch (Exception we) {
            if (we.getCause().getCause() instanceof AccessException) {
                // Se ocorrer um erro de acesso
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Acesso negado.", null));
                // Redireciona para a pagina com o mapeamento 'login' no faces-config.
                context.getApplication().getNavigationHandler().handleNavigation(context, null, "loginUsuario");
            } else {
                // Se ocorrer um erro inesperado, exibe a mensagem abaixo
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, we.getMessage(), null));
                // Redireciona para a pagina com o mapeamento 'erro' no faces-config.
                context.getApplication().getNavigationHandler().handleNavigation(context, null, "errorPage");
            }

        }
    }
}
